package com.framework.common.annotation;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.framework.common.dataTypeConfig.handler.ReplaceHandler;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author 龘鵺
 * @className com.framework.common.annotation
 * @description 数据类型注解类
 * @datetime 2025-01-09 11:11:11
 * @version 1.0
 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
@Documented
@JacksonAnnotationsInside
@JsonSerialize(using = ReplaceHandler.class)
public @interface DataTypeTarget {

    /**
     * 类型 (需与实现类上的 {@link DataTypeTarget} 注解type对应)
     * 默认取当前字段的值 如果设置了 @{@link DataTypeTarget#fields()} 则取映射字段的值
     */
    String type();

    /**
     * 映射字段 (如果不为空则取此字段的值)
     */
    String fields() default "";

    /**
     * 代码 例如: com.framework.model.common.Type - typeCode (=operaterStatus)
     */
    String code() default "";

}
